const mongoose = require("../util/db");
const async = require("async");
const positionSchema = new mongoose.Schema({
  title: String,
  company: String,
  salary: Number,
  experience: String,
  logo: String
});

const Position = mongoose.model("positions", positionSchema);

// 定义一个取数据的方法
const getPositions = (n,perpage) => {
  // 查询positions里所有职位数据
  // 由于find是一个异步方法，所以封装promise
  return new Promise((resolve, reject) => {
    async.waterfall([(cb) => {
      Position.count((err, count) => {
        if (err) cb(err)
        else {
          const total = Math.ceil(count / perpage)
          cb(null, total)
        }
      })
    }, (total, cb) => {
      // 这里接收到第一个查询传递过来的total，判断n是否超过total
      if (n > total) {
        n = total
      }
      // 如果n没有超就查询的第n页，如果n超了，就是最后一页
      Position.find(null, null, { limit: perpage, skip: (n-1)*perpage }, (err, positions) => {
        if (err) cb(err)
        else cb(null, { positions, n, total })
      })
    }], (err, res) => {
      resolve(res)
    })
  });
};

// 定义一个更新数据的方法
const updateOnePos = ({ id, title, company, salary, experience }) => {
  return new Promise((resolve, reject) => {
    // 根据id找到数据并且更新
    // 第三个参数里的new属性指的是回调里的doc是否为更新之后的数据
    Position.findByIdAndUpdate(
      id,
      { title, company, salary, experience },
      { new: true },
      (err, doc) => {
        if (err) reject();
        else resolve(doc);
      }
    );
  });
};
//定义一个删除数据的方法
const delOnePos = id => {
  return new Promise((resolve, reject) => {
    Position.findByIdAndDelete(id, (err, data) => {
      if (err) reject;
      else resolve(data);
    });
  });
};
//增加数据的方法
const addOnePos = ({ title, company, salary, logo, experience }) => {
  const pos = new Position({ title, company, salary, logo, experience });
  return new Promise((resolve, reject) => {
    pos.save((err, doc) => {
      if (err) reject(err);
      else resolve(doc);
    });
  });
};

module.exports = {
  getPositions,
  updateOnePos,
  addOnePos,
  delOnePos
};
